Viime aikoina suoritin osan JavaScript-koodistani Crockfordin JSLintin kautta, ja se antoi seuraavan virheen: Ongelma rivin 1 merkissä 1: Puuttuu "use range" -käsky. Tehdessäni joitain hakuja huomasin, että jotkut ihmiset lisäävät "käytä tiukasti"; JavaScript-koodiinsa. Kun lisäsin lauseen, virhe lakkasi näkymästä. Valitettavasti Google ei paljastanut suurta osaa tämän merkkijonon taustalla olevasta historiasta. Varmasti sillä on oltava jotain tekemistä sen kanssa, miten selain tulkitsee JavaScriptiä, mutta minulla ei ole aavistustakaan, mikä vaikutus sillä olisi. Joten mikä on "käytä tiukkaa"; mitä se tarkoittaa, ja onko se edelleen merkityksellistä? Reagoivatko jokin nykyisistä selaimista "käytä tiukasti" -toimintoa? merkkijono vai onko se tulevaa käyttöä varten?
2020-12-07 22:07:00
Tämä Javascriptin tiukasta tilasta kertova artikkeli saattaa kiinnostaa sinua: John Resig - ECMAScript 5 tiukka tila, JSON ja paljon muuta Lainatakseni mielenkiintoisia osia: Tiukka tila on uusi ominaisuus ECMAScript 5: ssä, jonka avulla voit sijoittaa ohjelman tai toiminnon "tiukkaan" toimintaympäristöön. Tämä tiukka konteksti estää tiettyjen toimien tekemisen ja tuo lisää poikkeuksia. Ja: Tiukka tila auttaa parilla tavalla: Se saa kiinni tavallisista koodaavista bloopereista ja heittää poikkeuksia. Se estää tai heittää virheitä, kun suoritetaan suhteellisen "vaarallisia" toimia (kuten pääsy globaaliin objektiin). Se poistaa toiminnot, jotka ovat hämmentäviä tai huonosti harkittuja. Huomaa myös, että voit käyttää "tiukkaa tilaa" koko tiedostoon ... Tai voit käyttää sitä vain tiettyyn toimintoon (lainaan edelleen John Resigin artikkelista): // Tiukka koodi ... (funktio () { "käytä tiukasti"; // Määritä kirjastosi tiukasti ... }) (); // Ei-tiukka koodi ... Mikä voi olla hyödyllistä, jos joudut sekoittamaan vanhan ja uuden koodin ;-) Joten oletan, että se on vähän kuin "käytä tiukkaa", jota voit käyttää Perlissä (siis nimi?): Se auttaa sinua tekemään vähemmän virheitä havaitsemalla enemmän asioita, jotka voivat johtaa rikkoutumiseen. Tiukkaa tilaa tukevat nyt kaikki suuret selaimet. Alkuperäisissä ECMAScript-moduuleissa (tuonti- ja vientilausekkeilla) ja ES6-luokissa tiukka tila on aina käytössä eikä sitä voi poistaa käytöstä. | Se on uusi ominaisuus ECMAScript 5: ssä. John Resig kirjoitti siitä mukavan yhteenvedon. Se on vain merkkijono, jonka laitat JavaScript-tiedostoihisi (joko tiedoston yläosaan tai toiminnon sisälle), joka näyttää tältä: "käytä tiukasti"; Sen lisääminen koodiin nyt ei saisi aiheuttaa ongelmia nykyisten selainten kanssa, koska se on vain merkkijono. Se voi aiheuttaa ongelmia koodissasi tulevaisuudessa, jos koodi rikkoo käytäntöä. Esimerkiksi, jos sinulla on tällä hetkellä foo = "bar" määrittelemättä ensin foo, koodisi alkaa epäonnistua ... mikä on mielestäni hyvä asia. | Lausunto "käytä tiukkaa"; kehottaa selainta käyttämään Strict-tilaa, joka on pienempi ja turvallisempi JavaScript-ominaisuusjoukko. Luettelo ominaisuuksista (ei tyhjentävä) Estää globaalit muuttujat. (Sieppaa puuttuvat var-ilmoitukset ja kirjoitusvirheet muuttujien nimissä) Hiljaiset epäonnistuneet tehtävät heittävät virheen tiukassa tilassa (osoitetaan NaN = 5;) Yritykset poistaa palautamattomat ominaisuudet heittävät (poista Object.prototype) Edellyttää, että kaikki objekti literaalin ominaisuusnimet ovat yksilöllisiä (var x = {x1: "1", x1: "2"}) Toimintoparametrien nimien on oltava yksilöllisiä (funktion summa (x, x) {...}) Kieltää oktaalisyntaksin (var x = 023; jotkut kehittäjät olettavat väärin, että edeltävä nolla ei muuta numeron muuttamista.) Kieltää avainsanalla tiukassa tilassa eval ei tuo uusia muuttujia Kieltää tavallisten nimien poistamisen (poista x;) Kieltää nimien eval ja argumenttien sitomisen tai osoittamisen missä tahansa muodossa Tiukka tila ei peitä argumenttiobjektin aliaksen ominaisuuksia muodollisten parametrien kanssa. (eli funktion summana (a, b) {return argumentit [0] + b;} Tämä toimii, koska argumentit [0] on sidottu a: han ja niin edelleen.) argumentteja.callee ei tueta [Viite: Tiukka tila, Mozilla Developer Network] | Jos ihmiset ovat huolissaan tiukasta käytöstä, saattaa olla syytä tarkistaa tämä artikkeli: ECMAScript 5 'Strict mode' -tuki selaimissa. Mitä tämä tarkoittaa? NovoGeek.com - Krishnan weblog Siinä puhutaan selaintuesta, mutta mikä tärkeintä, kuinka käsitellä sitä turvallisesti: function isStrictMode () { palaa! tämä; } / * palauttaa arvon false, koska 'tämä' viittaa globaaliin objektiin ja '! tästä' tulee väärä * / function isStrictMode () { "käytä tiukasti"; palaa! tämä; } / * palauttaa arvon tosi, koska tiukassa tilassa avainsana "tämä" ei viittaa globaaliin objektiin, toisin kuin perinteinen JS. Joten tässä 'tämä' on 'määrittelemätön' ja '! Tämä' tulee totta. * / | Varoituksen sana, kaikki kovasti lataavat ohjelmoijat: "use range" -asetuksen käyttäminen olemassa olevaan koodiin voi olla vaarallista! Tämä asia ei ole hyvä olo, iloiset kasvot -tarra, jonka voit iskeä koodiin, jotta se olisi 'parempi'. "Käytä tiukkaa" -käytäntöä käytettäessä selain heittää yhtäkkiä poikkeuksia satunnaisiin paikkoihin, joita se ei koskaan ennen heittänyt, vain siksi, että teet jotain, jonka oletusarvoinen / löysä JavaScript sallii mielellään, mutta tiukka JavaScript-kauhistus! Harvoin käytetyissä puheluissa koodissasi saattaa olla tiukkuussääntöjen rikkomuksia, jotka aiheuttavat poikkeuksen vain silloin, kun ne lopulta suoritetaan - esimerkiksi maksavan asiakkaasi käyttämässä tuotanto-ympäristössä! Jos aiot syöksyä, on hyvä käyttää "käytä tiukkaa" -valintaa kattavien yksikötestien ja tiukasti määritetyn JSHint-rakennustehtävän ohella, mikä antaa sinulle varmuutta siitä, että moduulissasi ei ole pimeää kulmaa, joka räjäyttää kamalasti vain siksi, että olet ottanut käyttöön tiukan tilan. Tai hei, tässä on toinen vaihtoehto: älä vain lisää "use range" mihinkään vanhaan koodiin, se on todennäköisesti turvallisempaa, rehellisesti. ÄLÄ KOSKAAN lisää "käytä tiukkaa" moduuleihin, joita et omista tai jotka eivät ole omistuksessaylläpitää, kuten kolmansien osapuolten moduuleja. Uskon, että vaikka se onkin tappava häkkieläin, "tiukka käyttö" voi olla hyvää kamaa, mutta se on tehtävä oikein. Paras aika toimia tiukasti on, kun projektisi on vihreä kenttä ja aloitat alusta. Määritä JSHint / JSLint kaikilla varoituksilla ja vaihtoehdoilla niin tiukasti kuin tiimisi voi vatsaan, hanki hyvä rakennus- / testi- / vakuutusjärjestelmä, joka on väärennetty kuten Grunt + Karma + Chai, ja vasta sitten alat merkitä kaikki uudet moduulisi nimellä " käytä tiukkaa ". Ole valmis parantamaan paljon kiusallisia virheitä ja varoituksia. Varmista, että kaikki ymmärtävät vakavuuden määrittämällä koontiversioksi FAIL, jos JSHint / JSLint aiheuttaa rikkomuksia. Projektini ei ollut vihreän kentän projekti, kun hyväksyin "käytä tiukkaa". Tämän seurauksena IDE-tunnukseni on täynnä punaisia merkkejä, koska minulla ei ole "käytä tiukkaa" puolessa moduuleistani, ja JSHint valittaa siitä. Se on minulle muistutus siitä, mitä refaktorointia minun pitäisi tehdä tulevaisuudessa. Tavoitteenani on olla punainen merkki vapaana kaikkien puuttuvien "käytä tiukkojen" lausumieni takia, mutta se on vuosien päässä. | Käyttämällä 'käytä tiukkaa'; ei yhtäkkiä tee koodistasi parempaa. JavaScript-tiukka tila on ominaisuus ECMAScript 5: ssä. Voit ottaa tiukan tilan käyttöön ilmoittamalla tämän komentosarjan / toiminnon yläosassa. 'käytä tiukasti'; Kun JavaScript-moottori näkee tämän direktiivin, se alkaa tulkita koodia erityistilassa. Tässä tilassa virheitä heitetään, kun havaitaan tiettyjä koodauskäytäntöjä, jotka saattavat olla mahdollisia vikoja (mikä on tiukan tilan takana). Harkitse tätä esimerkkiä: var a = 365; var b = 030; Pakkomielteessään järjestää numeeriset literaalit kehittäjä on vahingossa alustanut muuttujan b oktaalilitraalilla. Ei-tiukka tila tulkitsee tämän numeerisena literaalina, jonka arvo on 24 (perustassa 10). Tiukka tila aiheuttaa kuitenkin virheen. Tässä vastauksessa on tyhjentävä luettelo tiukassa tilassa olevista erikoisuuksista. Missä minun pitäisi käyttää "käytä tiukkaa" ;? Uudessa JavaScript-sovelluksessani: Ehdottomasti! Tiukkaa tilaa voidaan käyttää ilmiantajana, kun teet jotain tyhmää koodisi kanssa. Nykyisessä JavaScript-koodissani: Luultavasti ei! Jos nykyisessä JavaScript-koodissasi on lauseita, jotka ovat kiellettyjä tiukassa tilassa, sovellus yksinkertaisesti rikkoutuu. Jos haluat tiukan tilan, sinun on oltava valmis virheenkorjaukseen ja korjaamaan nykyinen koodi. Siksi 'käytä tiukkaa' -toiminnon käyttö; ei yhtäkkiä tee koodistasi parempaa. Kuinka käytän tiukkaa tilaa? Lisää 'use range'; lause komentosarjan päällä: // Tiedosto: myscript.js 'käytä tiukasti'; var a = 2; .... Huomaa, että kaikki tiedostossa myscript.js tulkitaan tiukassa tilassa. Tai lisää "käytä tiukasti"; lauseke toiminnon rungon päällä: toiminto doSomething () { 'käytä tiukasti'; ... } Kaikki doSomethingin leksikaalinen toiminta-alue tulkitaan tiukassa tilassa. Sana leksikaalinen soveltamisala on tärkeä tässä. Esimerkiksi, jos tiukka koodisi kutsuu kirjaston toimintoa, joka ei ole tiukka, vain koodisi suoritetaan tiukassa tilassa, ei kutsuttua toimintoa. Katso tästä vastauksesta parempi selitys. Mitkä asiat ovat kiellettyjä tiukassa tilassa? Löysin mukavan artikkelin, jossa kuvataan useita asioita, jotka on kielletty tiukassa tilassa (huomaa, että tämä ei ole yksinomainen luettelo): Soveltamisala Historiallisesti JavaScriptiä on sekoitettu siitä, miten se toimii valitaan. Joskus ne näyttävät olevan staattisesti rajattuja, mutta jotkut ominaisuudet saavat heidät käyttäytymään kuin dynaamisesti. Tämä on sekava, mikä tekee ohjelmista vaikeasti luettavia ja ymmärrettäviä. Väärinkäsitys aiheuttaa virheitä. Se on myös ongelma suorituskyvyssä. Staattinen ulottuvuus mahdollistaisi muuttuvan sitoutumisen tapahtuvan kääntämisen yhteydessä aikaa, mutta vaatimus dynaamisesta laajuudesta tarkoittaa, että sitomisen on oltava lykättiin ajonaikaan, mikä tuottaa merkittävän suorituskyvyn rangaistus. Tiukka tila edellyttää, että kaikki muuttujien sidonnat tehdään staattisesti. Tämä tarkoittaa, että ominaisuudet, jotka aiemmin vaativat dynaamista sitomista on poistettava tai muutettava. Erityisesti with-lause on eliminoidaan ja eval-toiminnon kyky manipuloida soittajan ympäristö on tiukasti rajoitettu. Yksi tiukan koodin eduista on, että työkalut, kuten YUI Compressor voi tehdä parempaa työtä sitä käsiteltäessä. Implisiittiset globaalit muuttujat JavaScript on sisältänyt globaalit muuttujat. Jos et ilmoita muuttujaa nimenomaisesti, globaali muuttuja on ilmoitettu sinulle epäsuorasti. Tämä helpottaa ohjelmointia aloittelijoille, koska he voivat laiminlyödä joitain perussijoitustaan askareita. Mutta se tekee suurempien ohjelmien hallinnasta paljon enemmän vaikeaa ja se heikentää merkittävästi luotettavuutta. Joten tiukasti implisiittisiä globaaleja muuttujia ei enää luoda. Sinun pitäisi ilmoita kaikki muuttujat nimenomaisesti. Globaali vuoto Tämän voi aiheuttaa useita tilanteita sitoutua globaaliin kohteeseen. Esimerkiksi, jos unohdat anna uusi etuliite, kun soitat rakentajalletoiminto, rakentaja sitoutuu yllättäen globaaliin kohteeseen, joten uuden objektin alustamisen sijaan se on hiljaa muuttujien muuttaminen. Näissä tilanteissa tiukka tila tulee sen sijaan sitoa tämä määrittelemättömään, mikä saa konstruktorin toimimaan heittää sen sijaan poikkeus, jolloin virhe voidaan havaita paljon ennemmin. Meluisa epäonnistuminen JavaScriptillä on aina ollut vain luku -ominaisuudet, mutta sinä ei voinut luoda niitä itse, ennen kuin ES5: n Object.createProperty toiminto paljasti kyseisen kyvyn. Jos yritit määrittää arvon vain luku -ominaisuuteen, se epäonnistuu äänettömästi. Tehtävä olisi ei muuta kiinteistön arvoa, mutta ohjelmasi etenee vaikka sillä oli. Tämä on eheysvaara, joka voi aiheuttaa ohjelmille mennä epäjohdonmukaiseen tilaan. Tiukassa tilassa yritetään muuttaa a vain luku -ominaisuus aiheuttaa poikkeuksen. Octal Lukujen oktaalinen (tai perusta 8) edustus oli erittäin suuri hyödyllinen, kun tehdään konetason ohjelmointia koneilla, joiden sana koot olivat kerrannaiset 3. Tarvitsit oktaalia työskennellessäsi CDC: n kanssa 6600 keskusyksikköä, jonka sanakoko oli 60 bittiä. Jos osaisit lukea oktaali, voit katsoa sanaa 20 numerona. Kaksi numeroa edustettuina op-koodi, ja yksi numero tunnisti yhden kahdeksasta rekisteristä. Aikana hidas siirtyminen konekoodeista korkean tason kieliin oli ajatellaan olevan hyödyllistä tarjota oktaalimuotoja ohjelmointikielillä. C: ssä oktaalisuuden edustus oli erittäin valitettava valittu: Johtava nolla. Joten C: ssä 0100 tarkoittaa 64, ei 100, ja 08 on virhe, ei 8. Vielä enemmän valitettavasti tämä anakronismi on ollut kopioitu lähes kaikille moderneille kielille, mukaan lukien JavaScript, missä sitä käytetään vain virheiden luomiseen. Sillä ei ole muuta tarkoitusta. Joten sisään tiukassa tilassa oktaalimuotoja ei enää sallita. Jne Argumentit pseudo-taulukosta tulevat hieman enemmän taulukon kaltainen ES5: ssä. Tiukassa tilassa se menettää soittajansa ja soittajansa ominaisuudet. Tämä antaa mahdollisuuden välittää argumenttisi epäluotettaviksi koodia luopumatta paljon luottamuksellisesta asiayhteydestä. Myös argumentit funktioiden ominaisuus eliminoidaan. Tiukassa tilassa kaksoisnäppäimet funktiolitraalissa tuottavat a syntaksivirhe. Funktiolla ei voi olla kahta parametria samalla nimellä. Funktiolla ei voi olla muuttujaa, jolla on sama nimi kuin sillä parametrit. Toiminto ei voi poistaa omia muuttujiaan. Yritys ei-määritettävän ominaisuuden poistaminen aiheuttaa nyt poikkeuksen. Primitiivinen arvoja ei ole implisiittisesti kääritty. Varatut sanat tuleville JavaScript-versioille ECMAScript 5 lisää luettelon varattuista sanoista. Jos käytät niitä muuttujina tai argumentteina, tiukka tila heittää virheen. Varatut sanat ovat: toteuttaa, käyttöliittymä, anna, pakkaa, yksityinen, suojattu, julkinen, staattinen ja tuotto Lisälukemista Tiukka tila - JavaScript | MDN Selaimen tuki tiukalle tilalle Siirtyminen tiukkaan tilaan | Suosittelen voimakkaasti jokaista kehittäjää aloittamaan tiukka tila nyt. On tarpeeksi selaimia, jotka tukevat sitä, että tiukka tila auttaa laillisesti säästämään virheiltä, joita emme edes tienneet koodissasi. Ilmeisesti alkuvaiheessa on virheitä, joita emme ole koskaan ennen kokeneet. Täyden hyödyn saamiseksi meidän on tehtävä asianmukainen testaus tiukkaan tilaan siirtymisen jälkeen varmistaaksemme, että olemme saaneet kaiken kiinni. Ehdottomasti emme vain heitä koodissamme tiukkaa käyttöä ja oletamme, ettei siinä ole virheitä. Joten suhde on, että on aika alkaa käyttää tätä uskomattoman hyödyllistä kieliominaisuutta paremman koodin kirjoittamiseen. Esimerkiksi, var henkilö = { nimi: 'xyz', sijainti: 'abc', fullname: function () {"käytä tiukkaa"; palauta tämä.nimi; } }; JSLint on Douglas Crockfordin kirjoittama virheenkorjausohjelma. Liitä vain komentosarjasi, niin se etsii nopeasti havaittavia ongelmia ja virheitä koodissasi. | Haluaisin tarjota hieman perustellumman vastauksen täydentämään muita vastauksia. Toivoin muokata suosituinta vastausta, mutta epäonnistuin. Yritin tehdä siitä mahdollisimman kattavan ja täydellisen. Lisätietoja on MDN-ohjeissa. "käytä tiukasti" ECMAScript 5: ssä esitettyä direktiiviä. Direktiivit ovat samanlaisia kuin lausunnot, mutta erilaiset. use range ei sisällä avainsanoja: Direktiivi on yksinkertainen lauseke, joka koostuu erityisestä merkkijonolitraalista (yksittäisissä tai kaksoislainauksissa). JavaScript-moottorit, jotka eivät käytä ECMAScript 5: ää, vain näkevät lausekkeen ilman sivuvaikutuksia. On odotettavissa, että ECMAScript-standardien tulevissa versioissa otetaan käyttöön todellinen avainsana; lainaukset täten vanhentuvat. use range -toimintoa voidaan käyttää vain komentosarjan tai funktion alussa, ts. sen on edeltävä kaikkia muita (todellisia) lauseita. Sen ei tarvitse olla funktion komentosarjan ensimmäinen käsky: sitä voivat edeltää muut lause lausekkeet (ja JavaScript)täytäntöönpanot voivat kohdella niitä täytäntöönpanokohtaisina direktiiveinä). Merkkijonon literaalilausekkeet, jotka seuraavat ensimmäistä todellista lausetta (komentosarjassa tai toiminnossa), ovat yksinkertaisia lausekkeita. Tulkit eivät saa tulkita niitä direktiiveinä, eikä niillä ole vaikutusta. Käyttötiheysdirektiivi osoittaa, että seuraava koodi (komentosarjassa tai toiminnossa) on tiukka koodi. Komentosarjan korkeimmalla tasolla olevaa koodia (koodi, joka ei ole funktiossa) pidetään tiukkana koodina, kun komentosarja sisältää tiukan käyttödirektiivin. Funktion sisältöä pidetään tiukkana koodina, kun toiminto itsessään on määritelty tiukassa koodissa tai kun toiminto sisältää käyttötiheellisen direktiivin. Koodia, joka välitetään eval () -menetelmälle, pidetään tiukkana koodina, kun eval () kutsuttiin tiukasta koodista tai se sisältää itse käyttödirektiivin. ECMAScript 5: n tiukka tila on rajoitettu Java-kielen osajoukko, joka eliminoi kielen asiaankuuluvat puutteet ja sisältää tiukemman virhetarkistuksen ja paremman turvallisuuden. Seuraavassa luetellaan erot tiukan ja normaalin tilan välillä (joista kolme ensimmäistä ovat erityisen tärkeitä): Et voi käyttää with-lauseketta tiukassa tilassa. Tiukassa tilassa kaikki muuttujat on ilmoitettava: jos määrität arvon tunnisteelle, jota ei ole ilmoitettu muuttujaksi, funktioksi, funktioparametriksi, saalislausekeparametriksi tai globaalin objektin ominaisuudeksi, saat ReferenceErrorin. Normaalitilassa tunniste ilmoitetaan implisiittisesti globaalina muuttujana (globaalin objektin ominaisuutena) Tiukassa tilassa avainsanalla tällä on arvo, jota ei ole määritelty funktioissa, joita kutsuttiin funktioiksi (ei menetelmiksi). (Normaalitilassa tämä osoittaa aina globaalin objektin). Tätä eroa voidaan käyttää testaamaan, tukeeko toteutus tiukkaa tilaa: var hasStrictMode = (function () {"käytä tiukkaa"; palauta tämä === undefined} ()); Myös silloin, kun toiminto kutsutaan puhelun () kanssa tai sitä käytetään tiukassa tilassa, tämä on täsmälleen puhelun () tai sovelluksen () ensimmäisen kutsun argumentin arvo. (Normaalitilassa nolla ja määrittelemätön korvataan globaalilla Objektilla ja arvot, jotka eivät ole objekteja, heitetään esineiksi.) Tiukassa tilassa saat TypeError-arvon, kun yrität määrittää vain luku -ominaisuuksia tai määrittää uusia ominaisuuksia laajentamattomalle objektille. (Normaalitilassa molemmat yksinkertaisesti epäonnistuvat ilman virheilmoitusta.) Tiukassa tilassa, kun välität koodin eval (): lle, et voi ilmoittaa tai määritellä muuttujia tai toimintoja soittajan piiriin (kuten voit tehdä sen normaalitilassa). Sen sijaan eval (): lle luodaan uusi laajuus ja muuttujat ja funktiot ovat sen sisällä. Tämä laajuus tuhoutuu, kun eval () on suorittanut suorituksen. Tiukassa tilassa funktion argumentti-objekti sisältää staattisen kopion arvoista, jotka välitetään tälle funktiolle. Normaalitilassa argumentit-objekti käyttäytyy jonkin verran "maagisesti": Taulukon elementit ja nimetyt funktioparametrit viittaavat molempiin arvoihin. Tiukassa tilassa saat SyntaxError-arvon, kun poisto-operaattoria seuraa pätevä tunniste (muuttuja, funktio tai toimintoparametri). Normaalitilassa poistolauseke ei tekisi mitään ja se arvioitiin vääräksi. Tiukassa tilassa saat TypeError-yhteyden, kun yrität poistaa ei-määritettävää ominaisuutta. (Normaalitilassa yritys yksinkertaisesti epäonnistuu ja poistolauseke arvioidaan vääräksi). Tiukassa tilassa sitä pidetään syntaktisena virheenä, kun yrität määrittää useita ominaisuuksia samalla nimellä objektilitraalille. (Normaalitilassa ei ole virhettä.) Tiukassa tilassa sitä pidetään syntaktisena virheenä, kun funktiodeklaraatiossa on useita samannimisiä parametreja. (Normaalitilassa ei ole virhettä.) Tiukassa tilassa oktaalilitraalit eivät ole sallittuja (nämä ovat literaaleja, jotka alkavat 0x: llä. (Normaalitilassa jotkut toteutukset sallivat oktaalilitraalit). Tiukassa tilassa tunnisteita eval ja argumentteja käsitellään kuin avainsanoja. Et voi muuttaa niiden arvoa, et voi antaa heille arvoa, etkä voi käyttää niitä muuttujien, toimintojen, toimintoparametrien tai saalislohkon tunnisteiden niminä. Tiukassa tilassa on enemmän rajoituksia mahdollisuudelle tutkia puhelupinoa. arguments.caller ja argument.callee aiheuttavat TypeError-toiminnon tiukassa tilassa. Lisäksi jotkut funktioiden soittaja- ja argumenttiominaisuudet tiukassa tilassa aiheuttavat TypeError-arvon, kun yrität lukea niitä. | Kaksi senttiäni: Yksi tiukan tilan tavoitteista on mahdollistaa ongelmien nopeampi virheenkorjaus. Se auttaa kehittäjiä heittämällä poikkeuksen, kun esiintyy tiettyjä vääriä asioita, jotka voivat aiheuttaa verkkosivusi hiljaista ja outoa käyttäytymistä. Heti kun käytämme tiukkaa, koodi heittää virheitä, mikä auttaa kehittäjää korjaamaan sen etukäteen. Muutama tärkeä asia, jonka olen oppinut käytön jälkeen: Estää globaalin muuttujan ilmoituksen: var puu1Data= {nimi: 'Banaanipuu', ikä: 100, lehtiä: 100000}; funktiopuu (typeOfTree) { vaihteleva ikä; var leafCount; ikä = typeOfTree.age; leafCount = typeOfTree.leafCount; nameoftree = typeOfTree.name; }; var tree1 = uusi puu (tree1Data); console.log (ikkuna); Nyt tämä koodi luo nimettömän maailmanlaajuisen laajuuden, johon pääsee käsiksi window.nameoftree-ohjelmalla. Kun toteutamme käytön tiukka, koodi heittää virheen. Uncaught ReferenceError: nameoftree ei ole määritelty Näyte Poistetaan lauseella: lausekkeilla ei voida minimoida työkaluilla, kuten uglify-js. Ne on myös vanhentunut ja poistettu tulevista JavaScript-versioista. Näyte Estää kaksoiskappaleet: Kun meillä on päällekkäinen ominaisuus, se aiheuttaa poikkeuksen Uncaught SyntaxError: Duplicate data property in object literal not sallittu tiukassa tilassa "käytä tiukasti"; var tree1Data = { nimi: 'Banana Tree', ikä: 100, lehtiMäärä: 100000, nimi: 'Banaanipuu' }; Niitä on muutama, mutta minun on hankittava lisää tietoa siitä. | Jos käytät viime vuonna julkaistua selainta, se todennäköisesti tukee JavaScriptin tiukkaa tilaa. Vain vanhemmat selaimet ennen kuin ECMAScript 5: stä tuli nykyinen standardi, eivät tue sitä. Komennon ympärillä olevat lainaukset varmistavat, että koodi toimii edelleen myös vanhemmissa selaimissa (vaikka syntaksivirhettä tiukassa tilassa aiheuttavat yleensä vain komentosarjan toimintahäiriön joissakin vaikeasti havaittavissa tavoissa näissä vanhemmissa selaimissa) | Kun lisäät "use strict"; -asetuksen, seuraavat tapaukset syntetisoivat virheen ennen komentosarjan suorittamista: Pohjustaa tietä tuleville ECMAScript-versioille käyttämällä yhtä hiljattain varatuista avainsanoista (ennestään ECMAScript 6: lle): työkalut, käyttöliittymä, let, paketti, yksityinen, suojattu, julkinen, staattinen ja tuotto. Toiminnon ilmoittaminen lohkoina jos (a : 3: 15) kohdassa: 6: 5 Tässä kääntäjä heittää referenssivirheen. Tiukassa tilassa kääntäjä ei salli meidän käyttää muuttujaa ilmoittamatta sitä. Joten muistivuodot voidaan estää. Lisäksi voimme kirjoittaa optimoidun koodin. | Tiukka tila eliminoi virheet, jotka ohitettaisiin ei-tiukassa tilassa, mikä tekee javascriptistä "turvallisemman". Pidetäänkö sitä parhaiden käytäntöjen joukossa? Kyllä, sitä pidetään osana parhaita käytäntöjä työskenneltäessä javascriptin kanssa tiukan tilan sisällyttämiseksi. Tämä tehdään lisäämällä alla oleva koodirivi JS-tiedostoon. 'käytä tiukasti'; koodissasi. Mitä se tarkoittaa käyttäjäagenteille? Koodin tulkitseminen tiukassa tilassa osoittaa käyttäjän agenteille, kuten selaimille, että heidän tulisi käsitellä koodia kirjaimellisesti kirjoitettuna ja heittää virhe, jos koodilla ei ole mitään järkeä. Esimerkiksi: Harkitse .js-tiedostossasi seuraavaa koodia: Skenaario 1: [EI VAHVAA TILA] var city = "Chicago" console.log (kaupunki) // Tulostaa kaupungin nimen, ts. Chicago Skenaario 2: [EI VAHVAA TILA] kaupunki = "Chicago" console.log (kaupunki) // Tulostaa kaupungin nimen, ts. Chicago Joten miksi muuttujan nimi tulostetaan molemmissa tapauksissa? Ilman tiukkaa tilaa, käyttäjäagentit käyvät usein läpi useita muutoksia ongelmallisiin koodeihin yrittäen saada sen järkeväksi. Pinnalla tämä voi tuntua hienolta, ja todellakin, tiukan tilan ulkopuolella työskenteleminen antaa ihmisille mahdollisuuden kastaa jalkansa JavaScript-koodilla ilman, että kaikki yksityiskohdat ovat naulattuja. Kehittäjänä en kuitenkaan halua jättää virhettä koodiini, koska tiedän, että se voi tulla takaisin ja purra minua myöhemmin, ja haluan myös kirjoittaa vain hyvän koodin. Ja siellä tiukka tila auttaa. Skenaario 3: [STRICT MODE] 'käytä tiukasti'; kaupunki = "Chicago" console.log (kaupunki) // Viitevirhe: määritys on ilmoittamaton muuttujakaupunki. Lisävinkki: Koodin laadun ylläpitämiseksi tiukassa tilassa sinun ei tarvitse kirjoittaa tätä uudestaan, varsinkin jos sinulla on useita .js-tiedostoja. Voit ottaa tämän säännön käyttöön maailmanlaajuisesti eslint-säännöissä seuraavasti: Tiedostonimi: .eslintrc.js module.exports = { env: { es6: totta }, säännöt: { tiukka: ['virhe', 'yleinen'], }, }; Okei, mitä estetään tiukassa tilassa? Muuttujan käyttäminen ilmoittamatta sitä heittää virheen tiukassa tilassa. Näin estetään tahattomien globaalien muuttujien luominen koko sovelluksellesi. Chicagon tulostusesimerkki kattaa tämän erityisesti. Muuttujan, funktion tai argumentin poistaminen on ei-ei tiukassa tilassa. "käytä tiukasti"; funktio x (p1, p2) {}; poista x; // Tämä aiheuttaa virheen Parametrin nimen kopioiminen ei ole sallittua tiukassa tilassa. "käytä tiukasti"; funktio x (p1, p1) {}; // Tämä aiheuttaa virheen Javascript-kielellä varattuja sanoja ei sallita tiukassa tilassa. Sanat ovat toteutusliittymä, let, paketit, yksityinen, suojattu, julkinen. staattinen ja tuotto Kattavamman luettelon saat MDN-ohjeista täältä: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode | Erittäin aktiivinen kysymys. Ansaitse 10 mainetta vastaamiseksi tähän kysymykseen. Maineen vaatimus auttaa suojaamaan tätä kysymystä roskapostilta ja vastaamattomuudelta. Eikö vastausta etsit? Selaa muita kysymyksiä, jotka on merkitty koodilla javascript syntaksi jslint use-strict tai kysy oma kysymyksesi.